↳ Prolog
↳ PrologToPiTRSProof
perm_in(.(X, Y), .(U, V)) → U1(X, Y, U, V, delete_in(U, .(X, Y), W))
delete_in(U, .(X, Y), .(X, Z)) → U3(U, X, Y, Z, delete_in(U, Y, Z))
delete_in(X, .(X, Y), Y) → delete_out(X, .(X, Y), Y)
U3(U, X, Y, Z, delete_out(U, Y, Z)) → delete_out(U, .(X, Y), .(X, Z))
U1(X, Y, U, V, delete_out(U, .(X, Y), W)) → U2(X, Y, U, V, perm_in(W, V))
perm_in([], []) → perm_out([], [])
U2(X, Y, U, V, perm_out(W, V)) → perm_out(.(X, Y), .(U, V))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
perm_in(.(X, Y), .(U, V)) → U1(X, Y, U, V, delete_in(U, .(X, Y), W))
delete_in(U, .(X, Y), .(X, Z)) → U3(U, X, Y, Z, delete_in(U, Y, Z))
delete_in(X, .(X, Y), Y) → delete_out(X, .(X, Y), Y)
U3(U, X, Y, Z, delete_out(U, Y, Z)) → delete_out(U, .(X, Y), .(X, Z))
U1(X, Y, U, V, delete_out(U, .(X, Y), W)) → U2(X, Y, U, V, perm_in(W, V))
perm_in([], []) → perm_out([], [])
U2(X, Y, U, V, perm_out(W, V)) → perm_out(.(X, Y), .(U, V))
PERM_IN(.(X, Y), .(U, V)) → U11(X, Y, U, V, delete_in(U, .(X, Y), W))
PERM_IN(.(X, Y), .(U, V)) → DELETE_IN(U, .(X, Y), W)
DELETE_IN(U, .(X, Y), .(X, Z)) → U31(U, X, Y, Z, delete_in(U, Y, Z))
DELETE_IN(U, .(X, Y), .(X, Z)) → DELETE_IN(U, Y, Z)
U11(X, Y, U, V, delete_out(U, .(X, Y), W)) → U21(X, Y, U, V, perm_in(W, V))
U11(X, Y, U, V, delete_out(U, .(X, Y), W)) → PERM_IN(W, V)
perm_in(.(X, Y), .(U, V)) → U1(X, Y, U, V, delete_in(U, .(X, Y), W))
delete_in(U, .(X, Y), .(X, Z)) → U3(U, X, Y, Z, delete_in(U, Y, Z))
delete_in(X, .(X, Y), Y) → delete_out(X, .(X, Y), Y)
U3(U, X, Y, Z, delete_out(U, Y, Z)) → delete_out(U, .(X, Y), .(X, Z))
U1(X, Y, U, V, delete_out(U, .(X, Y), W)) → U2(X, Y, U, V, perm_in(W, V))
perm_in([], []) → perm_out([], [])
U2(X, Y, U, V, perm_out(W, V)) → perm_out(.(X, Y), .(U, V))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
PERM_IN(.(X, Y), .(U, V)) → U11(X, Y, U, V, delete_in(U, .(X, Y), W))
PERM_IN(.(X, Y), .(U, V)) → DELETE_IN(U, .(X, Y), W)
DELETE_IN(U, .(X, Y), .(X, Z)) → U31(U, X, Y, Z, delete_in(U, Y, Z))
DELETE_IN(U, .(X, Y), .(X, Z)) → DELETE_IN(U, Y, Z)
U11(X, Y, U, V, delete_out(U, .(X, Y), W)) → U21(X, Y, U, V, perm_in(W, V))
U11(X, Y, U, V, delete_out(U, .(X, Y), W)) → PERM_IN(W, V)
perm_in(.(X, Y), .(U, V)) → U1(X, Y, U, V, delete_in(U, .(X, Y), W))
delete_in(U, .(X, Y), .(X, Z)) → U3(U, X, Y, Z, delete_in(U, Y, Z))
delete_in(X, .(X, Y), Y) → delete_out(X, .(X, Y), Y)
U3(U, X, Y, Z, delete_out(U, Y, Z)) → delete_out(U, .(X, Y), .(X, Z))
U1(X, Y, U, V, delete_out(U, .(X, Y), W)) → U2(X, Y, U, V, perm_in(W, V))
perm_in([], []) → perm_out([], [])
U2(X, Y, U, V, perm_out(W, V)) → perm_out(.(X, Y), .(U, V))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
DELETE_IN(U, .(X, Y), .(X, Z)) → DELETE_IN(U, Y, Z)
perm_in(.(X, Y), .(U, V)) → U1(X, Y, U, V, delete_in(U, .(X, Y), W))
delete_in(U, .(X, Y), .(X, Z)) → U3(U, X, Y, Z, delete_in(U, Y, Z))
delete_in(X, .(X, Y), Y) → delete_out(X, .(X, Y), Y)
U3(U, X, Y, Z, delete_out(U, Y, Z)) → delete_out(U, .(X, Y), .(X, Z))
U1(X, Y, U, V, delete_out(U, .(X, Y), W)) → U2(X, Y, U, V, perm_in(W, V))
perm_in([], []) → perm_out([], [])
U2(X, Y, U, V, perm_out(W, V)) → perm_out(.(X, Y), .(U, V))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
DELETE_IN(U, .(X, Y), .(X, Z)) → DELETE_IN(U, Y, Z)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
DELETE_IN(.(X, Y)) → DELETE_IN(Y)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
U11(X, Y, U, V, delete_out(U, .(X, Y), W)) → PERM_IN(W, V)
PERM_IN(.(X, Y), .(U, V)) → U11(X, Y, U, V, delete_in(U, .(X, Y), W))
perm_in(.(X, Y), .(U, V)) → U1(X, Y, U, V, delete_in(U, .(X, Y), W))
delete_in(U, .(X, Y), .(X, Z)) → U3(U, X, Y, Z, delete_in(U, Y, Z))
delete_in(X, .(X, Y), Y) → delete_out(X, .(X, Y), Y)
U3(U, X, Y, Z, delete_out(U, Y, Z)) → delete_out(U, .(X, Y), .(X, Z))
U1(X, Y, U, V, delete_out(U, .(X, Y), W)) → U2(X, Y, U, V, perm_in(W, V))
perm_in([], []) → perm_out([], [])
U2(X, Y, U, V, perm_out(W, V)) → perm_out(.(X, Y), .(U, V))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U11(X, Y, U, V, delete_out(U, .(X, Y), W)) → PERM_IN(W, V)
PERM_IN(.(X, Y), .(U, V)) → U11(X, Y, U, V, delete_in(U, .(X, Y), W))
delete_in(U, .(X, Y), .(X, Z)) → U3(U, X, Y, Z, delete_in(U, Y, Z))
delete_in(X, .(X, Y), Y) → delete_out(X, .(X, Y), Y)
U3(U, X, Y, Z, delete_out(U, Y, Z)) → delete_out(U, .(X, Y), .(X, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
PERM_IN(.(X, Y)) → U11(delete_in(.(X, Y)))
U11(delete_out(U, W)) → PERM_IN(W)
delete_in(.(X, Y)) → U3(X, delete_in(Y))
delete_in(.(X, Y)) → delete_out(X, Y)
U3(X, delete_out(U, Z)) → delete_out(U, .(X, Z))
delete_in(x0)
U3(x0, x1)
delete_in(.(X, Y)) → delete_out(X, Y)
POL(.(x1, x2)) = 1 + x1 + x2
POL(PERM_IN(x1)) = 2·x1
POL(U11(x1)) = 2·x1
POL(U3(x1, x2)) = 1 + x1 + x2
POL(delete_in(x1)) = x1
POL(delete_out(x1, x2)) = x1 + x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ RuleRemovalProof
PERM_IN(.(X, Y)) → U11(delete_in(.(X, Y)))
U11(delete_out(U, W)) → PERM_IN(W)
delete_in(.(X, Y)) → U3(X, delete_in(Y))
U3(X, delete_out(U, Z)) → delete_out(U, .(X, Z))
delete_in(x0)
U3(x0, x1)
U11(delete_out(U, W)) → PERM_IN(W)
POL(.(x1, x2)) = x1 + x2
POL(PERM_IN(x1)) = 2·x1
POL(U11(x1)) = x1
POL(U3(x1, x2)) = 2·x1 + x2
POL(delete_in(x1)) = 2·x1
POL(delete_out(x1, x2)) = 2 + x1 + 2·x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
PERM_IN(.(X, Y)) → U11(delete_in(.(X, Y)))
delete_in(.(X, Y)) → U3(X, delete_in(Y))
U3(X, delete_out(U, Z)) → delete_out(U, .(X, Z))
delete_in(x0)
U3(x0, x1)